public class code5_1 {
    //根据sum最后一个1的位置k来分，如果k这个位为1一起异或，为0一起异或
    public int[] singleNumber(int[] nums) {
        //1.先全部进行异或
        int sum = 0;
        for(int x:nums) {
            sum ^= x;
        }

        //2.找出sum最后一个1的位置
        int k = 0;
        for(int i=0;i<31;i++) {
            if(((sum>>i)&1)==1) k = i;
        }
        //3.将这两个数分开
        int[] arr = new int[2];
        for(int x: nums) {
            if(((x>>k)&1)==1) arr[0]^=x;
            else arr[1]^=x;
        }
        return arr;
    }
}
